home *** CD-ROM | disk | FTP | other *** search
/ .net 2002 March / DotNetMagazine-Issue107-Coverdisc-NET107-02-03-PCMac.bin / pc / PC Software / free_browsing / DavesQckSearchDbar3-14 / dqsd.exe / defer_tools.js < prev    next >
Text File  |  2002-10-03  |  10KB  |  304 lines

  1. // Open a search window either with the default browser or with IE
  2. function openSearchWindow(url)
  3. {
  4.   openNamedSearchWindow(url, getReuseBrowserWindowMode() ? DQSD_BROWSER_WINDOW_NAME : "_blank");
  5. }
  6.  
  7. // Open a search window in an existing frame
  8. function openNamedSearchWindow(url, name)
  9. {
  10.   if (useExternalBrowser && DQSDLauncher)
  11.     DQSDLauncher.OpenDocument(url);
  12.   else
  13.     window.open(url, name);
  14. }
  15.  
  16. // direct shellexecute
  17. function openDocument(path)
  18. {
  19.   ensureLauncher();
  20.   if (DQSDLauncher)
  21.   {
  22.     var params = path.match(/^(("[^"]*")|\S*)\s*(.*)/);
  23.     if (params)
  24.     {
  25.       DQSDLauncher.OpenDocument(params[1], params[3]);
  26.     }
  27.     else
  28.     {
  29.       DQSDLauncher.OpenDocument(path);
  30.     }
  31.   }
  32. }
  33.  
  34. var submitcount = 0;
  35.  
  36. // Submit a form either with the default browser or with IE
  37. function submitForm(form, dontChangeTarget)
  38. {
  39.   var oldtarget;
  40.   var newtarget;
  41.  
  42.   //allow the Override
  43.   if ( !dontChangeTarget )
  44.   {
  45.     // Here's a safeguard for forgetting to put a target in the FORM
  46.     if ( (getReuseBrowserWindowMode() == 0) || !form.attributes["target"].nodeValue || (form.attributes["target"].nodeValue && form.attributes["target"].nodeValue == '') )
  47.     {
  48.       form.attributes["target"].nodeValue = '_blank';
  49.     }
  50.  
  51.     // Reuse a single window if the user wants to and the target is _blank
  52.     // Don't override targets with any other name because some searches may want
  53.     // their own window.
  54.  
  55.     oldtarget = form.attributes["target"].nodeValue;
  56.     newtarget = oldtarget;
  57.  
  58.     if ((getReuseBrowserWindowMode() > 0) && oldtarget && (oldtarget == '_blank'))
  59.     {
  60.       // 1=same window always; 2=new window for each search type
  61.       newtarget = ((getReuseBrowserWindowMode() == 1) ? DQSD_BROWSER_WINDOW_NAME : (DQSD_BROWSER_WINDOW_NAME + '_' + form.name));
  62.     }
  63.     else
  64.     {
  65.       newtarget = DQSD_BROWSER_WINDOW_NAME + "_" + submitcount;
  66.       submitcount = submitcount + 1;
  67.     }
  68.     form.attributes["target"].nodeValue = newtarget;
  69.   }
  70.  
  71.   if (useExternalBrowser && DQSDLauncher)
  72.     DQSDLauncher.SubmitForm(form);
  73.   else
  74.   {
  75.     if (newtarget && pagetemplate)
  76.     {
  77.       var w = window.open(pagetemplate, newtarget);
  78.       w.history.back(1);
  79.     }
  80.     form.submit();
  81.   }
  82.  
  83.   if (oldtarget)
  84.     form.attributes["target"].nodeValue = oldtarget;
  85. }
  86.  
  87. // Used by the calendar and the menu (or anything that uses IE window.createPopup method), which cannot call
  88. // the stylesheet directly.
  89. function convertStylesToInline()
  90. {
  91.   var stylestring = new String();
  92.   for (var j = 0; j < document.styleSheets.length; j++)
  93.   {
  94.     for (var i = 0; i < document.styleSheets[j].rules.length; i++)
  95.     {
  96.       stylestring += document.styleSheets[j].rules[i].selectorText + ' {' + document.styleSheets[j].rules[i].style.cssText + '}'
  97.     }
  98.   }
  99.   return(stylestring);
  100. }
  101.  
  102. function protocolHandled(url)
  103. {
  104.   if (!ensureLauncher())
  105.     return true; // what else can we do except assume the protocol is handled?
  106.  
  107.   var results = url.match(/(\w+):/);
  108.   if (!results)
  109.     return false; // not a valid url
  110.  
  111.   try
  112.   {
  113.     var handler = DQSDLauncher.GetProtocolHandler(results[1]);
  114.   }
  115.   catch (e)
  116.   {
  117.     return false;
  118.   }
  119.  
  120.   return true;
  121. }
  122.  
  123. // isURL
  124. //
  125. // Takes a string as a parameter and determines if it is a http URL (using either http or https protocol)
  126. // If the string is not a URL, then it attempts to detect obvious dns names, and if so, it prepends http://
  127. // to the string.  In either of the above to cases, the final string is returned, otherwise, 'false' is
  128. // returned.
  129. function isURL(t)
  130. {
  131.   // detect strings that look like URLs or filenames
  132.   prot = new RegExp("^(http://|https://|ftp://)([\\-a-z0-9]+\\.)*[\\-a-z0-9]+" +
  133.           "|^[a-z]:($|\\\\)" +
  134.           "|^\\\\\\\\[a-z0-9]+($|\\\\($|[a-z0-9]+($|\\\\)))", "i");
  135.   if (prot.exec(t))
  136.     return t;
  137.  
  138.   // detect strings that look like DNS names
  139.   dns = new RegExp("^www\.([\\-a-z0-9]+\\.)+[\\-a-z0-9]+(/\\S*)?$" +
  140.           "|^([\\-a-z0-9]+\\.)+(com|net|org|edu|gov|mil|[a-z]{2})(/\\S*)?$", "i");
  141.   if (dns.exec(t))
  142.   {
  143.     t = "http://" + t;
  144.     return t;
  145.   }
  146.   return false;
  147. }
  148.  
  149. // parseArgs (Neel Doshi - 03/31/2002)
  150. //
  151. // Used to parse standard switches (/foo or /foo:bar).  Takes the following parameters:
  152. //    q - string from the search function
  153. //    expectedSwitches - list or array of the expected switch values
  154. //    expandSwitches - optional parameter used to determine if the switch shortcuts should be expanded (i.e. /f becomes /foo)
  155. // Function returns an object with three properties
  156. //    q - the input string with the switches removed
  157. //    switches - array of objects with these two properties:
  158. //           name:   expanded name of the matched switch (i.e. foo as in /foo:bar)
  159. //            value:  value of switch (i.e. bar as in /foo:bar)
  160. //    switch_val - associative array with the switch name as the key with the switch value as the value. (i.e. switch_val["foo"] = "bar" as in /foo:bar)
  161. //
  162. function parseArgs(q, expectedSwitches, expandSwitches)
  163. {
  164.   // In case the caller does not pass in a value
  165.   if (typeof expandSwitches == 'undefined')
  166.     expandSwitches = 1;
  167.  
  168.   // In case the caller uses a delimited (;,<space>) string
  169.   if (typeof expectedSwitches[0] == 'undefined')
  170.     expectedSwitches = expectedSwitches.split( /[,;/\s]/ );
  171.  
  172.   var switches = [];
  173.   var switch_val = [];
  174.  
  175.   // Split the query to allow for easy looping.
  176.   var args_array = q.split(' ');
  177.  
  178.   // Regular expression that defines switches
  179.   var re_switch = /\/(([-.\w]+)(?::?(\S*)))\s*/;
  180.   var re_res_args;
  181.   var re_res_switch;
  182.  
  183.   // Loop through the q array and see if any of the q's look like switches
  184.   for (var i = 0; i < args_array.length; i++)
  185.   {
  186.     // If a q looks like a switch, loop through the switch array and see if any of the switches match.
  187.     re_res_args = args_array[i].match(re_switch);
  188.     if (re_res_args)
  189.     {
  190.       for (var j = 0; j < expectedSwitches.length && !re_res_switch; j++)
  191.       {
  192.         var expect_regex = new RegExp(
  193.             '^(' + re_res_args[2].replace('.', '\\.') +
  194.              ')' + (expandSwitches ? '' : '$'), 'i');
  195.  
  196.         re_res_switch = expectedSwitches[j].match(expect_regex);
  197.  
  198.         //  If there is a match, adjust the args_array, and save the values.
  199.         if (re_res_switch)
  200.         {
  201.           switch_val[expectedSwitches[j]] = re_res_args[3];
  202.           switches.push( {name:expectedSwitches[j].toLowerCase(), value:re_res_args[3]} );
  203.           args_array.splice(i, 1);
  204.           i--;
  205.         }
  206.       }
  207.       re_res_switch = "";
  208.     }
  209.   }
  210.   q = args_array.join(' ');
  211.   return { q:q, switches:switches, switch_val:switch_val };
  212. }
  213.  
  214.  
  215. // nullArgs (Neel Doshi - 04/09/2002)
  216. //
  217. // Many functions will open the <link> url when the query is null or the description if the query is "?".  This function automates this process.
  218. //    func - string name of the function
  219. //    q - string from the search function
  220. // The function returns false if the query was not null or "?" and true otherwise
  221. //
  222. function nullArgs(func, q)
  223. {
  224.   if (q == "")
  225.   {
  226.     if (searches[func].link)
  227.     {
  228.       openSearchWindow(searches[func].link);
  229.       return true;
  230.     }
  231.   }
  232.   if (q == "?" || q == "")
  233.   {
  234.     if (searches[func].desc)
  235.     {
  236.  
  237.       if ((typeof qsfind) == 'function')
  238.       {
  239.         // If QSFind exists use that to display the help
  240.         var qsarg = func + " /function";
  241.         qsfind(qsarg);
  242.       }
  243.       else
  244.       {
  245.         // Otherwise use an alert box
  246.         var search_desc = searches[func].desc;
  247.  
  248.         // convery <br> tags to newlines
  249.         var re = new RegExp("(<br)( )?(\/>)", "g");
  250.         search_desc = search_desc.replace(re, "\n");
  251.  
  252.         // Replace tabs and multiple spaces in the description with one space
  253.         var re = new RegExp("((\\t)|( ))+", "g");
  254.         search_desc = search_desc.replace(re, " ");
  255.  
  256.         // Replace newline space with nothing
  257.         var re = new RegExp("\n( )", "g");
  258.         search_desc = search_desc.replace(re, "");
  259.  
  260.         // Remove any more HTML tags
  261.         var re = new RegExp("<(\/)?\\w+( )?[\\w\"\=\ ]*(\/)?>", "g");
  262.         var search_desc = search_desc.replace(re, "");
  263.         alert(search_desc);
  264.       }
  265.       return true;
  266.     }
  267.   }
  268.   else
  269.     return false;
  270. }
  271.  
  272. function getReuseBrowserWindowMode()
  273. {
  274.   return reuseBrowserWindowModeOverride;
  275. }
  276.  
  277. function displayPopupMessage( msg, headHTML )
  278. {
  279.   var dqsdMessagePopup = window.createPopup();
  280.   var windowW = 350;
  281.   var dqsdMessagePopup = window.createPopup();
  282.   var dqsdMessagePopupBody = dqsdMessagePopup.document.body;
  283.   var dqsdMessageBodyCode = "<html><head>" + (typeof headHTML == 'undefined' ? '' : headHTML ) + "</head><body>";
  284.   dqsdMessageBodyCode += "<table id=qstable border=0 cellspacing=1 cellpadding=2 width=100% height=100%>";
  285.   dqsdMessageBodyCode += "<tr><td valign=top><style>" + convertStylesToInline() + "</style>";
  286.   dqsdMessageBodyCode += "<tr><td valign=top style='text-align: center' class=helpboxDescriptions>" + msg;
  287.   dqsdMessageBodyCode += "</tr></td></table></body></html>";
  288.   dqsdMessagePopupBody.innerHTML = dqsdMessageBodyCode;
  289.   dqsdMessagePopup.document.body.style.border="outset 2px";
  290.   dqsdMessagePopup.document.body.style.background='menu';
  291.   dqsdMessagePopup.document.body.style.overflowY='auto';
  292.  
  293.   // Temporatily show the popup to determine the proper final
  294.   // height for the popup.
  295.   dqsdMessagePopup.show(0, 0, windowW, 0);
  296.   var windowH = dqsdMessagePopupBody.scrollHeight + 6;
  297.   dqsdMessagePopup.hide();
  298.  
  299.   // Put a cap on the popup height
  300.   windowH = windowH > window.screen.height-100 ? window.screen.height-100 : windowH;
  301.  
  302.   dqsdMessagePopup.show((buttonalign == "left" ? 0 : document.body.clientWidth - windowW), -windowH, windowW, windowH, document.body);
  303. }
  304.